/**
 * 修复数据库字段类型脚本
 * 将 logs.data 从 text 改为 mediumtext
 * 将 blogs.content 从 text 改为 longtext
 * 将 blogs.cover 从 varchar(500)/text 改为 longtext（支持 base64 图片）
 * 
 * 使用方法: npm run fix-fields
 * 或: ts-node scripts/fixFields.ts
 */

import mysql from 'mysql2/promise';
import path from 'path';
import dotenv from 'dotenv';

// 加载环境配置
const env = process.env.NODE_ENV || 'dev';
const envFile = env === 'prd' ? '.env.prd' : '.env.dev';
dotenv.config({ path: path.resolve(process.cwd(), envFile) });
dotenv.config();

const config = {
  host: process.env.MYSQL_HOST || 'localhost',
  port: parseInt(process.env.MYSQL_PORT || '3306', 10),
  user: process.env.MYSQL_USER || 'root',
  password: process.env.MYSQL_PASSWORD || '',
  database: process.env.MYSQL_DATABASE || 'member_management',
};

async function fixFields() {
  let connection: mysql.Connection | null = null;

  try {
    console.log('开始修复数据库字段类型...');
    console.log(`环境: ${env}`);
    console.log(`数据库: ${config.database}\n`);

    // 连接数据库
    connection = await mysql.createConnection({
      host: config.host,
      port: config.port,
      user: config.user,
      password: config.password,
      database: config.database,
    });

    console.log('✓ 数据库连接成功\n');

    // 修复 logs.data 字段
    console.log('正在修复 logs.data 字段（text → mediumtext）...');
    try {
      await connection.query(
        `ALTER TABLE \`logs\` MODIFY COLUMN \`data\` mediumtext COMMENT '附加数据（JSON）'`
      );
      console.log('  ✓ logs.data 字段修复成功\n');
    } catch (err: any) {
      if (err.code === 'ER_BAD_FIELD_ERROR') {
        console.log('  - logs 表不存在，跳过\n');
      } else {
        console.error(`  ✗ logs.data 字段修复失败: ${err.message}\n`);
      }
    }

    // 修复 blogs.content 字段
    console.log('正在修复 blogs.content 字段（text → longtext）...');
    try {
      await connection.query(
        `ALTER TABLE \`blogs\` MODIFY COLUMN \`content\` longtext NOT NULL COMMENT '博客内容（富文本HTML）'`
      );
      console.log('  ✓ blogs.content 字段修复成功\n');
    } catch (err: any) {
      if (err.code === 'ER_BAD_FIELD_ERROR') {
        console.log('  - blogs 表不存在，跳过\n');
      } else {
        console.error(`  ✗ blogs.content 字段修复失败: ${err.message}\n`);
      }
    }

    // 修复 blogs.cover 字段
    console.log('正在修复 blogs.cover 字段（varchar(500)/text → longtext）...');
    try {
      await connection.query(
        `ALTER TABLE \`blogs\` MODIFY COLUMN \`cover\` longtext DEFAULT NULL COMMENT '封面图（支持 base64 图片）'`
      );
      console.log('  ✓ blogs.cover 字段修复成功\n');
    } catch (err: any) {
      if (err.code === 'ER_BAD_FIELD_ERROR') {
        console.log('  - blogs 表不存在，跳过\n');
      } else {
        console.error(`  ✗ blogs.cover 字段修复失败: ${err.message}\n`);
      }
    }

    console.log('=== 修复完成 ===');
    console.log('现在可以重启服务，错误应该不会再出现了。\n');

    await connection.end();
  } catch (error: any) {
    console.error('\n❌ 修复失败:');
    console.error(error.message);
    if (connection) {
      await connection.end();
    }
    process.exit(1);
  }
}

fixFields();

